iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
AI & Data

30天胡搞瞎搞學會pyspark系列 第 10

[ Day 10 ] - Pyspark | 清理 - 字串篇-2.1 : 正規表示式科普( regular expression )

  • 分享至 

  • xImage
  •  

終於進入雙位數了我好感動,每日日更不存稿,讓我下定決心,以後要做這種奇奇怪怪的挑戰前,千萬要深思熟慮好好存稿,不然每天的內容都讓自己想哭
好啦那還是來進入正題吧!
講到字串,不可避免的就是大名鼎鼎的正規表示式啦,今天既是要帶大家利用正規表示式的方式來更有效率的切出(或是移除)那些字串啦

正規表示式(regular expression)科普:

一個正規表示式通常被稱為一個模式(pattern),為用來描述或者符合一系列符合某個句法規則的字串。例如:Handel、Händel和Haendel這三個字串,都可以由H(a|ä|ae)ndel這個模式來描述。
維基百科:正則表示式

那這個正規表示式究竟是什麼呢?

其實他就是一個可以拿來描述符合某種規則的字串,通常可以拿來做文字的萃取,搜尋等等,最常見的應用是在網站上的一些輸入的限制,是不是有遇過,某些網站必須要輸入數字/或是email做了一定限制的輸入框,這就是regular expression 的最經典的應用。

所以說,這個跟Data Engineer 有什麼關係?

假設如果前端都將pattern好好的定義清楚了,那麼跟Data engineer,當然是沒什麼關係,但很常時候,我們並不會全權依賴前端提供的結構化資料,需要去爬蟲獲取其他外部網站也是一件很正常的事情,這時候,資料的品質與爬蟲的內容就不全然是你可以控制的,所以這個時候,就會需要為不乾淨的資料來點代價。

那我們來看看有哪些pattern吧

這邊只會簡單列幾個常用的pattern,文章的最後我會提供一些比較完整的pattern供大家參考!

pattern meaning of pattern example Match Not Match
. 所有的字元都會被match 到 p.g pig,pag,p0g,p^g Everything Match
\d 所有數字 : 0-9 p\d p1,p9 pi,py
\D 除了數字之外 p\D pi,py p1,p9
\s 空白(whitespace) p\sg p g pig
\S 除了空白之外 p\Sg pig p g
\w [a-zA-Z0-9__] \w a %$
[] or 的概念,在中括號裡面的都可以 p[ai]g pag,pig peg,pog,pug
^[] nor 的概念,除了你中括號中的都可以 p[^ai]g peg,pog,pug... pag,pig
* 0個到無限多個 pi*g pg,pig,piig,piiig pag,pbg
+ 1個到無限多個 pig+ pig,piig,piiig pg,pag
? 0個或1個 pi?g pg,pig pi,piig,piiig
.* 任何字串由某個開頭的 p.* pi,pig,piggy apig
{n} 同一個位置重複n次 pi{2}g piig pg,pig,piiig
{n,m} 同一個位置重複n到m次都可以 pi{2,4}g piig,piiig,piiiig pg,pig
{n,} 同一個位置重複n到無限次都可以 pi{2,}g piig,piiig..piiiiig pg,pig
^ 以什麼樣的東西開頭 ^p pig apig
$ 以什麼樣的東西結尾 g$ pig,aag,bbg pi
\n 換行符號 \n 恩就是換行符號
\t Tab符號 \t 恩就是Tab符號
\r 回到第一行的換行符號 \r 恩對
\r\n 微軟的醜不拉機換行 \r\n 恩對

簡單的說明就到這邊,如果對regular expression 有興趣的話,可以到這個網站上去做測試,我覺得算是很有幫助
介面也非常友善,可以測試任何你的data 或是你設計的pattern,在你實際寫成code之前就可以一目瞭然,快來試試看你的pattern 是不是work吧
正規表示式測試網站
希望今天的介紹對大家有幫助!明天,我們就正式進入regular expression 與pyspark 的愛恨情仇啦!


上一篇
[ Day 9 ] - Pyspark | 清理 - 字串篇-1 - 切切切 : split(), substr()
下一篇
[ Day 11 ] - Pyspark | 清理 - 字串篇-2.2 : regexp_extract(), regexp_replace(), rlike()
系列文
30天胡搞瞎搞學會pyspark30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言